package com.zzw.springboot.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzw.springboot.bean.SysRole;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 角色服务接口
 */
public interface SysRoleService extends IService<SysRole> {

    /**
     * 根据角色ID查询角色
     *
     * @param roleId 角色ID
     * @return 角色信息
     */
    SysRole selectRoleById(Integer roleId);

    /**
     * 根据用户ID查询角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<SysRole> selectRolesByUserId(Integer userId);

    /**
     * 校验角色名称是否唯一
     *
     * @param role 角色信息
     * @return 结果 true 唯一 false 不唯一
     */
    boolean checkRoleNameUnique(SysRole role);

    /**
     * 校验角色编码是否唯一
     *
     * @param role 角色信息
     * @return 结果 true 唯一 false 不唯一
     */
    boolean checkRoleCodeUnique(SysRole role);

    /**
     * 新增角色
     *
     * @param role 角色信息
     * @return 结果
     */
    boolean insertRole(SysRole role);

    /**
     * 修改角色
     *
     * @param role 角色信息
     * @return 结果
     */
    boolean updateRole(SysRole role);

    /**
     * 修改角色状态
     *
     * @param role 角色信息
     * @return 结果
     */
    boolean updateRoleStatus(SysRole role);

    /**
     * 批量删除角色
     *
     * @param roleIds 需要删除的角色ID数组
     * @return 结果
     */
    boolean deleteRoleByIds(Integer[] roleIds);

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return 结果
     */
    boolean deleteRoleById(Integer roleId);

    /**
     * 角色分配数据权限
     *
     * @param role 角色信息
     * @return 结果
     */
    boolean authDataScope(SysRole role);

    /**
     * 导出角色数据
     *
     * @param response 响应对象
     * @param roleIds 角色ID列表，为空则导出全部
     * @throws IOException IO异常
     */
    void exportRole(HttpServletResponse response, List<Integer> roleIds) throws IOException;
}
